/*
 * 三个参数
 * file： 一个是文件(类型是图片格式)，
 * w： 一个是文件压缩的后宽度， 宽度越小， 字节越小
 * objDiv： 一个是容器或者回调函数
 * photoCompress() 
 */
function photoCompress(file, w, objDiv) {
	var ready = new FileReader();
	/*开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容.*/
	ready.readAsDataURL(file);
	ready.onload = function() {
		var re = this.result;
		canvasDataURL(re, w, objDiv)
	}
}

function canvasDataURL(path, obj, callback) {
	var img = new Image();
	img.src = path;
	img.onload = function() {
		var that = this;
		// 默认按比例压缩
		var w = that.width,
			h = that.height,
			scale = w / h;
		w = obj.width || w;
		h = obj.height || (w / scale);
		var quality = 0.7; // 默认图片质量为0.7
		//生成canvas
		var canvas = document.createElement('canvas');
		var ctx = canvas.getContext('2d');
		// 创建属性节点
		var anw = document.createAttribute("width");
		anw.nodeValue = w;
		var anh = document.createAttribute("height");
		anh.nodeValue = h;
		canvas.setAttributeNode(anw);
		canvas.setAttributeNode(anh);
		ctx.drawImage(that, 0, 0, w, h);
		// 图像质量
		if(obj.quality && obj.quality <= 1 && obj.quality > 0) {
			quality = obj.quality;
		}
		// quality值越小，所绘制出的图像越模糊
		var base64 = canvas.toDataURL('image/jpeg', quality);
		// 回调函数返回base64的值
		callback(base64);
	}
}
/**  
 * 将以base64的图片url数据转换为Blob  
 * @param urlData  
 * 用url方式表示的base64图片数据  
 */
function convertBase64UrlToBlob(urlData) {
	var arr = urlData.split(','),
		mime = arr[0].match(/:(.*?);/)[1],
		bstr = atob(arr[1]),
		n = bstr.length,
		u8arr = new Uint8Array(n);
	while(n--) {
		u8arr[n] = bstr.charCodeAt(n);
	}
	return new Blob([u8arr], {
		type: mime
	});
}

function UploadFile(cate, size) {
	cate = cate || 'temp';
	size = size || 1024;
	var url = '/admin/upload/upload/cate/' + cate;
	var xhr;
	var fileObj = document.getElementById('file').files[0]; // js 获取文件对象
	var form = new FormData(); // FormData 对象
	if(fileObj.size > size * 1024) { //大于1M，进行压缩上传
		photoCompress(fileObj, {}, function(base64Codes) {
			var bl = convertBase64UrlToBlob(base64Codes);
			form.append("file", bl, "file_" + Date.parse(new Date()) + ".jpg"); // 文件对象
			xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
			xhr.open("post", url, true); //post方式，url为服务器请求地址，true 该参数规定请求是否异步处理。
			xhr.onload = function(evt) {
				var data = JSON.parse(evt.target.responseText);
				if(data.code == 1) {
					$('#thumb').val(data.src);
					$('#thumb_img').prop("src", data.src); //当上传成功后显示图片，data就是上传后的访问路径
				} else {
					alert(data.msg);
				}
			}; //请求完成
			xhr.onerror = function(evt) {
				alert("上传失败！");
			}; //请求失败
			xhr.send(form); //开始上传，发送form数据
		});
	} else { //小于等于1M 原图上传
		form.append("file", fileObj); // 文件对象
		xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
		xhr.open("post", url, true); //post方式，url为服务器请求地址，true 该参数规定请求是否异步处理。
		xhr.onload = function(evt) {
			var data = JSON.parse(evt.target.responseText);
			if(data.code == 1) {
				$('#thumb').val(data.src);
				$('#thumb_img').prop("src", data.src); //当上传成功后显示图片，data就是上传后的访问路径
			} else {
				alert(data.msg);
			}
		}; //请求完成
		xhr.onerror = function(evt) {
			alert("上传失败！");
		}; //请求失败
		xhr.send(form); //开始上传，发送form数据
	}
}

//上传文件方法
function UploadFile_more(cate, size,id,img_id,file_id) {
	cate = cate || 'temp';
	size = size || 1024;
	var url = '/admin/upload/upload/cate/' + cate;
	var xhr;
	var fileObj = document.getElementById(file_id).files[0]; // js 获取文件对象
	var form = new FormData(); // FormData 对象
	if(fileObj.size > size * 1024) { //大于1M，进行压缩上传
		photoCompress(fileObj, {}, function(base64Codes) {
			var bl = convertBase64UrlToBlob(base64Codes);
			form.append("file", bl, "file_" + Date.parse(new Date()) + ".jpg"); // 文件对象
			xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
			xhr.open("post", url, true); //post方式，url为服务器请求地址，true 该参数规定请求是否异步处理。
			xhr.onload = function(evt) {
				var data = JSON.parse(evt.target.responseText);
				if(data.code == 1) {
					$('#'+id).val(data.src);
					$('#'+img_id).prop("src", data.src); //当上传成功后显示图片，data就是上传后的访问路径
				} else {
					alert(data.msg);
				}
			}; //请求完成
			xhr.onerror = function(evt) {
				alert("上传失败！");
			}; //请求失败
			xhr.send(form); //开始上传，发送form数据
		});
	} else { //小于等于1M 原图上传
		form.append("file", fileObj); // 文件对象
		xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
		xhr.open("post", url, true); //post方式，url为服务器请求地址，true 该参数规定请求是否异步处理。
		xhr.onload = function(evt) {
			var data = JSON.parse(evt.target.responseText);
			if(data.code == 1) {
				$('#'+id).val(data.src);
				$('#'+img_id).prop("src", data.src); //当上传成功后显示图片，data就是上传后的访问路径
			} else {
				alert(data.msg);
			}
		}; //请求完成
		xhr.onerror = function(evt) {
			alert("上传失败！");
		}; //请求失败
		xhr.send(form); //开始上传，发送form数据
	}
}

//上传文件方法
function UploadEditor(fileObj, cate, size, completeFunction) {
	cate = cate || 'temp';
	size = size || 1024;
	var url = '/admin/upload/editor/cate/' + cate;
	var xhr;
	var form = new FormData(); // FormData 对象
	if(fileObj.size > size * 1024) { //大于1M，进行压缩上传
		photoCompress(fileObj, {}, function(base64Codes) {
			var bl = convertBase64UrlToBlob(base64Codes);
			form.append("file", bl, "file_" + Date.parse(new Date()) + ".jpg"); // 文件对象
			xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
			xhr.open("post", url, true); //post方式，url为服务器请求地址，true 该参数规定请求是否异步处理。
			xhr.onload = completeFunction; //请求完成
			xhr.onerror = function(evt) {
				alert("上传失败！");
			}; //请求失败
			xhr.send(form); //开始上传，发送form数据
		});
	} else { //小于等于1M 原图上传
		form.append("file", fileObj); // 文件对象
		xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
		xhr.open("post", url, true); //post方式，url为服务器请求地址，true 该参数规定请求是否异步处理。
		xhr.onload = completeFunction; //请求完成
		xhr.onerror = function(evt) {
			alert("上传失败！");
		}; //请求失败
		xhr.send(form); //开始上传，发送form数据
	}
}